package com.me.study.javaCore.jni;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * 配合 NativeEncryptUtils 解密使用的 字节码加密工具
 */
public class ClassEncryptUtil {

    /**
     * 未加密的原文件
     */
    public static final String SOURCE_FILE_PATH = "C:\\Users\\bin.yin\\Desktop\\img2\\par2.jpg";
    /**
     * 加密后的文件
     */
    public static final String DEST_FILE_PATH = "C:\\Users\\bin.yin\\Desktop\\img2\\par2-temp.jpg";

    private static final byte KEY = 19;

    public static void main(String[] args) throws IOException {

        xorEncryptDecrypt(SOURCE_FILE_PATH, DEST_FILE_PATH, KEY);
        System.out.println("加密/解密完成，输出文件：" + DEST_FILE_PATH);
    }

    /**
     * 读取指定文件，并使用 按位异或 加密
     */
    public static void xorEncryptDecrypt(String inputFilePath, String outputFilePath, byte key) throws IOException {
        try (FileInputStream fis = new FileInputStream(inputFilePath);
             FileOutputStream fos = new FileOutputStream(outputFilePath)) {
            byte[] buffer = new byte[1024];
            int bytesRead;

            while ((bytesRead = fis.read(buffer)) != -1) {
                for (int i = 0; i < bytesRead; i++) {
                    buffer[i] ^= key; // 对每个字节进行 XOR 操作
                }
                fos.write(buffer, 0, bytesRead);
            }
        }
    }

}
